package com.xin.demo.strategy;

import java.util.Arrays;

public class OperatorMain {
    public static void main(String[] args) {

        Cat[] cat = {new Cat(3, 4),
                new Cat(14, 11),
                new Cat(5, 17),
                new Cat(1, 2)};
        // 普通写法
        Sort.selectionSort(cat);
        System.out.println(Arrays.toString(cat));

        // 策略模式写法
        StrategySort<Cat> strategySort = new StrategySort<>();
        // 传进去需要比较的对象，以及对应的策略，也就是对应的比较方式
        // 根据身高比较
        strategySort.selectionSort(cat, new CatCompareToHeight());
        System.out.println("根据height排序：" + Arrays.toString(cat));

        //根据体重进行比较
        strategySort.selectionSort(cat, new CatCompareToWeight());
        System.out.println("根据weight排序：" + Arrays.toString(cat));

        // 现在我们不仅可以比较猫的大小，还可以比较任何一个动物的大小
        // lambda 表达式写法
        StrategySort<Dog> dogStrategySort = new StrategySort<>();
        Dog[] dogs = {new Dog(3, 9),
                new Dog(1, 11),
                new Dog(4, 1),
                new Dog(2, 2)};
        dogStrategySort.selectionSort(dogs, new Comparator<Dog>() {
            @Override
            public int compare(Dog o1, Dog o2) {
                return o1.height - o2.height;
            }
        });
        System.out.println(Arrays.toString(dogs));
    }
}

